perm filename BOLD2[F8,ALS] blob sn#329609 filedate 1978-01-26 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00024 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	*Black-and-Blue as of January 25 1978
C00009 00003	* ORG H'1000' QN1
C00014 00004	* BRDA                       Byte #     Initial board in SC
C00018 00005	* PMOV MES1 CUR1 WMC
C00023 00006	* WMCA  DATA FOR WMC
C00030 00007	* BORD MEN  Generate board image and introduce men
C00035 00008	* BLKP BLUP WAST BDAT SEDC TABL
C00038 00009	* CURS
C00046 00010	* MVC AMAP BLNK
C00052 00011	* INIT TY0 AMP BLNK UDIT YMF SKL
C00057 00012	* MWAD RASC SCRA SCRD
C00062 00013	* INHR
C00067 00014	* STOP at end of game
C00073 00015	* FLSH
C00077 00016	* SELE FLIP FORE
C00082 00017	* FORE
C00088 00018	* MSUB Subroutine to locate all plays in specified byte
C00094 00019	* NEXT PFND FIND
C00102 00020	* AFT No more plays found so time to back up
C00106 00021	EV6VAZ EVAL
C00111 00022	* SHOW ADTB SEE
C00116 00023	* TUN2 TUN1 END
C00119 00024	* Storage map
C00124 ENDMK
C⊗;
*Black-and-Blue as of January 25 1978
*Resident package addresses
JOYT    EQU  H'0C00'
LINE    EQU  H'0FDF'
SHCB    EQU  H'0FE2'
INPF    EQU  H'0FE3'
WTLN    EQU  H'0FE5'
TXC     EQU  H'0FE8'
CMRG    EQU  H'0FEA'
DBNC    EQU  H'0FEB'
UPI     EQU  H'0FFA'
JOYI    EQU  H'21AD'
IJS     EQU  H'22DB'
SHL     EQU  H'27C6'
SHR     EQU  H'27D3'
PUSH    EQU  H'40A9'
POPS    EQU  H'40BC'
SPS     EQU  H'40D0'
WC      EQU  H'40D9'
WDG     EQU  H'4105'
WAUD    EQU  H'41C8'
WAU1    EQU  H'41CC'
CDS     EQU  H'41D5'
WMS     EQU  H'4205'
UDAT    EQU  H'424D'
TRAN    EQU  H'43CD'
FCS     EQU  H'43D6'
WAIT    EQU  H'4501'
TIR     EQU  H'45DB'
SNE     EQU  H'46D6'
CLER    EQU  H'4762'
*Misc. constants
TCMD    EQU  H'44'
BCMD    EQU  H'6D'
TCOL    EQU  H'80'   TEXT COLOR
ULIN    EQU  H'FA'
COM     EQU  H'8F7'
*RAM assignments
BFLG    EQU  H'0C20' BUTTON EDGE FLAG
BLNF    EQU  H'0C21' Blink flag
XBLN    EQU  H'0C22' X value to blink
YBLN    EQU  H'0C23' Y value to blink
BCNT    EQU  H'0C24' Counter used in OKMV
BKMV    EQU  H'0C25' Data to index book moves
HSAV    EQU  H'0C26' H save location
PLY0    EQU  H'0C28' Place for player's ply depth choice
SFLG    EQU  H'0C29' SELE vs FIND flag  (0 if FIND)
PNUM    EQU  H'0C2A' Play number
ESAV    EQU  H'0C2C' Temporary save of BY and EMPTY byte
FFLG    EQU  H'0C2D' FIND ROUTINE FLAG
CVS     EQU  H'0C2E' CV save location
BSAV    EQU  H'0C2F' BY save location
OBJ0    EQU  H'0C30' Board 1, thru H'0E0F'
TREE    EQU  H'0E10' Tree data, thru H'0EFF', Player's board f
TRE2    EQU  H'0E20' Machine's first board here
PLMV    EQU  H'0ED0' Overlay region used for player's moves
DNUM    EQU  H'0EE0' Depth numbers (allows for passed boards)
PLAY    EQU  H'0EF0' BYTE and # (14 2 BYTE PAIRS)
XPOS    EQU  H'0F0C' XPOSITION(CURSOR)
YPOS    EQU  H'0F0F' YPOSITION(CURSOR)
OBJ1    EQU  H'0F10' Board 2, thru H'0FAF'
SCRE    EQU  H'0FB0' Score reference with off-set
SCOR    EQU  H'0FB1' Score
RGSV    EQU  H'0FC8' Register save start (int. update)
* Register assignment
SN      EQU     H'0'            Score number
BN      EQU     H'1'            Byte number
DR      EQU     H'2'            Direction
BY      EQU     H'3'            Byte
FB      EQU     H'4'            F or B number
RL      EQU     H'5'            R or L number
CV      EQU     H'6'            Count along string
SIDE    EQU     H'7'            Side that is active (0 1f black)
TEMP    EQU     H'8'
J       EQU     H'9'
HU      EQU     H'A'
HL      EQU     H'B'
ALOC    EQU     O'3'    LISU value for ACTIVE pieces
PLOC    EQU     O'4'    LISU value for PASSIVE pieces
ISA     EQU     O'30'   ISAR value for active area
ISP     EQU     O'40'   ISAR value for passive
* Ply depths
PLYA    EQU  H'3'    Playing depth for ABE
PLYB    EQU  H'5'    Playing depth for BETTY
PLYC    EQU  H'7'    Playing depth for CHARLIE
PLYD    EQU  H'9'    Playing depth for DOROTHY
*SPECIAL CONSTANTS
MSK     EQU  H'1'    X ZOOM BIT MASK (CMRG)
X       EQU  H'1'
Y       EQU  H'2'
VX      EQU  H'3'
VY      EQU  H'4'
CHT     EQU  H'3'    CURSOR HEIGHT
YTST    EQU  H'9'
XZOP    EQU  H'34'   LINE FOR RESTORE OF X ZOOM
MAXY    EQU  H'4D'   MAX Y COORD (=H'4F'-CHT)
* ORG H'1000' QN1
        ORG  H'1000' Initial operations and questions
        DC   H'AA'
        DC   H'55'
        DC   H'01'   BACKGROUND COLOR
        DC   H'00' 
        DC   H'2D27' BL
        DC   H'1131' AC
        DC   H'1500' K-
        DC   H'112B' AN
        DC   H'1F00' D-
        DC   H'2D27' BL
        DC   H'030B' UE
*-*-
        DCI  H'8F5'
        CLR
        ST           SET BACKGROUND BLACK
        PI   CDS     CLEAR DISPLAY
        PI   IJS     INITIALIZE JOYSTICK TABLE
        LISU 2       For safety only, can be removed later
        LISL 6
        CLR
        XS   S
        BM   QN1     Is clock running?
        LI   H'81'   No, so start it
        LR   D,A
        LIS  2
        LR   S,A
*-*-*-*- Initial question session
QN1     LIS  H'5'
        LR   0,A
        PI   SEDC    SET MESSAGE LNGTH&LINE POINTER
        DCI  SKL
        PI   WMS     WRITE MESSAGE
        PI   RKB     AND DO KEYBOARD READ
        CI   H'2D'
        BZ   QN10    Is it Betty?
        CI   H'31'   NO.
        BZ   QN9     Is it Charlie?
        CI   H'1F'
        BZ   QN8     Is it Dorothy
        LI   PLYA    Then it's Abe
        BR   QN11
QN8     LI   PLYD    It's Dorothy
        BR   QN11
QN9     LI   PLYC    It's Charlie
        BR   QN11
QN10    LI   PLYB    It's Betty
QN11    DCI  PLY0
        ST           AND SAVE IT.
        DS   0
        DS   0
        DS   0       SET FOR BUT TWO LINES
        PI   CDS     CLEAR DISPLAY
        PI   SEDC    SET LINE POINTER
        LIS  H'5'
        COM
        AS   S
        LR   S,A     SET FOR BUT H'1A' LENGTH
        DCI  YMF     DCO TO MESSAGE START
        PI   WMS     SO WRITE MESSAGE
        PI   RKB     READ KEYBOARD
        CI   H'2B'   Is answer an N?
        CLR
        BZ      QN13    0 in 7 means machine's play
        COM             -1 means player's play
QN13    LR      7,A
QN14    DCI  FSTP    Table of first plays
        XDC
        DCI  PLMV    List to verify plays
        LIS  H'9'
        LISU 2
        LISL 0
        LR   S,A     SET TRANSFER COUNT
        PI   TRAN    DO TRANSFER
        DCI  BKMV
        CLR
        ST           Clear Book move index value
        DCI  CMRG
        LI   H'65'
        ST           SET FOR X & Y ZOOM
        PI   CLER    CLER UM1 REGISTERS
        DCI  UPI     DCO TO UPDATE CONTROLS
        LIS  H'3'
        ST           SET INTO COUNT
        CLR
        ST           SET FOR FULL INIT
        LI   INIT:
        ST
        LI   INIT.
        ST           AND SET ADDRESS
        PI   WAUD    WAIT, THEN UPDATE
        LIS  H'5'
        LR   S,A     GET TRANSFER COUNT
        DCI  BDAT    SET SOURCE
        XDC          INTO DC1
        DCI  UPI+1   DESTINATION
        PI   TRAN    TRANSFER DATA
        PI   WAUD    WAIT, DO UPDATE, RESET ISAR&RET.
        PI   ENIN    NOW ENABLE INTERRUPT
* BRDA                       Byte #     Initial board in SC
* Load SC                        _________________________________
        LISU ALOC              0 |___|___|___|___|___|___|___|___|
        LISL 7                 1 |___|___|___|___|___|___|___|___|
        CLR       Clear area   2 |___|___|___|___|___|___|___|___|
BRDA    LR   D,A               3 |___|___|___|_A_|_P_|___|___|___|
        BR7  BRDA              4 |___|___|___|_P_|_A_|___|___|___|
        LISU PLOC              5 |___|___|___|___|___|___|___|___|
        LISL 7                 6 |___|___|___|___|___|___|___|___|
BRDP    LR   D,A               7 |___|___|___|___|___|___|___|___|
        BR7  BRDP                 80  40  20  10   8   4   2   1
        LISU ALOC                           Byte value
        LISL 3
        LIS     H'1'
        SL      4
        LR      I,A    Put H'10' into A row 3
        LISU PLOC
        LR      D,A    Put H'10' into P row 4
        LIS     H'8'
        LR      I,A    Put H'08' into P row 3
        LISU ALOC
        LR      S,A    Put H'08' into A row 4
        DCI  TREE
        LR   H,DC
        PI   SCRD    SR to RAM for player's first move
        PI   BORD    Generate board image with men
        DCI  XPOS
        LIS  H'0'
        ST           SET FOR LEFT MOST
        LIS  H'3'
        ST
        LIS  H'0'
        ST
        DCI  YPOS
        ST           AND SET FOR TOPMOST
*-*- Start play
        DCI     PNUM
        CLR
        ST           Reset play number
        XS      7
        BM   PMOV    Player to play first
*-*- Machine to play first
        DCI     PLAY+2  Store data here
        XDC
        LISU 2       Get random number
        LISL 5
        LIS  H'3'
        NS   S       Save last 2 bits
        SL      1    2 bytes per entry
        DCI     FSTP
        ADC
        LM
        XDC
        ST
        XDC
        LM
        XDC
        ST
        DCI  TRE2    Machine's board goes here
        LR   H,DC
        PI   SCRD    SR to RAM for machine's first move
        JMP  SELE    Go to SELE to make move
* PMOV MES1 CUR1 WMC
MES6    LIS  H'6'    "DOES NOT FLANK"
        BR   MES1
*
PMOV    PI   MWAD    Wait, then update
        PI   MVC     Initiate cursor
        DCI  TREE    Player's board is here
        LR   H,DC
MES0    CLR          "YOUR MOVE"
MES1    LR   0,A     Identify message
        PI   WMC     Write message
        DCI  BLNF
        CLR
        ST
CUR1    PI   CURS    Initiate cursor
*-*- Now X in 1, Y in 2, byte in 3 and byte # in 4
        LI      ISA     To active pieces
        AS      4       add in byte #
        LR      IS,A
        LR      A,S     Active pieces
        LISU    PLOC
        AS      S       Passive pieces
        NS      3       Cursor on piece?
        LIS     H'5'    "NON-EMPTY SQUARE"
        BNZ     MES1    Yes, write message
        CLR
        LR      0,A     Set to 0 to count
        DCI     PLMV    Possible moves listing
OKP1    CLR
        XM           Get byte from PLMV
        BZ   MES6    Non-flanking square
        DS   0       Count entry
        NS   3       Does it contain bit in 3?
        LM           Get byte #
        BZ   OKP1    Try again (testing byte)
        XS   4       Does # match?
        BNZ  OKP1    Try again (testing #)
        LR   A,0
        COM          Convert to + # for
        DCI  BKMV    book move counter and
        ST           save for reply select
        DCI  PLAY    Save data for SELE
        LR   A,3     BYTE
        ST
        LR   A,4     Byte #
        ST
        PI   MWAD    Do WAIT then UPDATE
        PI   MVC     Turn off cursor
        PI   ENIN    Enable interrupt
        DCI  TREE 
        LR   H,DC
        JMP  SELE
*-*-*- Message writing, uses R0, 1, SC O'24'
* calls UPDATE routine. Message # in 0.
WMC     LR   K,P     SAVE RETURN ADDRESS
        PI   PUSH    PUSH ONTO STACK
        DCI  H'872'
        LI   H'82'
        ST           TURN MESSAGE OBJECT OFF...
        DCI  HSAV
        LR   A,HU
        ST
        LR   A,HL
        ST
        PI   MWAD    WAIT, THEN UPDATE
        DCI  WMCA    DCO TO MESSAGE ADDRESS START
        LR   A,0     GET MESSAGE NUMBER
        SL   1
        AS   0
        ADC          ADD 3XNUMBER TO DCO
        LISU 2
        LISL 4       SET ISAR TO O'24'
        LM
        LR   S,A     SET MESSAGE LENGTH
        LM
        LR   QU,A
        LM
        LR   QL,A    MESSAGE ADDRESS INTO Q
        DCI  LINE
        LIS  H'5'
        SL   4
        ST           SET PROPER LINE NUMBER
        DCI  H'0E5F' DCO TO MESSAGE BUILD AREA
        LIS  H'7'
        SL   4
        LR   1,A     SET COUNTER
        CLR          CLEAR ACC
WMC1    ST
        DS   1
        BNZ  WMC1    CLEAR TEXT AREA
        PI   WAUD    WAIT, THEN DO UPDATE
        DCI  H'872'
        LIS  H'2'
        ST           TURN OBJECT ON
        LR   DC,Q    SET ADDRESS INTO DCO
        PI   WMS     WRITE MESSAGE
        PI   MWAD    WAIT, THEN UPDATE
        DCI  HSAV
        LM
        LR   HU,A
        LM
        LR   HL,A
        PI   ENIN    ENABLE INTERRUPTS ONCE MORE
        PI   POPS    POP RETURN ADDRESS
        PK           AND RETURN
* WMCA  DATA FOR WMC
*
WMCA    DC   H'9'    YOUR TURN  0
        DC   YRMV:
        DC   YRMV.
        DC   H'1'    (null message) 1
        DC   MYMV:
        DC   MYMV.
        DC   H'10'   YOU CAN NOT PLAY  2
        DC   NONO:
        DC   NONO.
        DC   H'E'    I CAN NOT PLAY  3
        DC   YOUP:
        DC   YOUP.
        DC   H'B'    IT IS A TIE  4
        DC   TIE:
        DC   TIE.
        DC   H'10'   NON-EMPTY SQUARE 5
        DC   NOTE:
        DC   NOTE.
        DC   H'E'    DOES NOT FLANK 6
        DC   NOTF:
        DC   NOTF.
        DC   H'6'    I WIN    7
        DC   IWIN:
        DC   IWIN.
        DC   H'8'    YOU WIN    8
        DC   UWIN:
        DC   UWIN.
YRMV    DC   H'0513' YOur turn
        DC   H'0309' UR
MYMV    DC   H'0'    -
        DC   H'0703' TU
        DC   H'092B' RN
NOTE    DC   H'2B13' NOn-empty
        DC   H'2B1C' N-
        DC   H'0B29' EM
        DC   H'2507' PT
        DC   H'0500' Y-
        DC   H'210F' SQ
        DC   H'0311' UA
        DC   H'090B' R3
NOTF    DC   H'1F13' DOes not flank
        DC   H'0B21' ES
        DC   H'00'   -
        DC   H'2B13' NO
        DC   H'0700' T-
        DC   H'1D27' FL
        DC   H'112B' AN
        DC   H'15'   K
NONO    DC   H'0513' YOu can not play
        DC   H'0300' U-
        DC   H'3111' CA
        DC   H'2B00' N-
        DC   H'2B13' NO
        DC   H'0700' T-
        DC   H'2527' PL
        DC   H'1105' AY
YOUP    DC   H'0100' I can not play
        DC   H'3111' CA
        DC   H'2B00' N-
        DC   H'2B13' NO
        DC   H'0700' T-
        DC   H'2527' PL
        DC   H'1105' AY
TIE     DC   H'0107' IT is a tie
        DC   H'00'   -
        DC   H'0121' IS
        DC   H'00'   -
        DC   H'1100' A-
        DC   H'0701' TI
        DC   H'0B'   E
IWIN    DC   H'0100' I win 
        DC   H'0D01' WI
        DC   H'2B00' N-
UWIN    DC   H'0513' YOu win 
        DC   H'0300' U-
        DC   H'0D01' WI
        DC   H'2B00' N-
*-*-*- Read keyboard
RKB     LR   K,P     Read keyboard
        PI   PUSH
        LISU 2
        LISL 4       SET ISAR FOR DELAY TIMER
        LIS  H'0'
        LR   S,A     SET FOR MAX DELAY
RKB1    PI   FCS     FETCH CHARACTER
        BZ   RKB1    NULL INPUT?
        BM   RKB1    NO. DEBOUNCED INPUT?
        PI   POPS    YES. POP RETURN ADDRESS
        LR   A,8     GET KEYBOARD INPUT
        PK           AND RETURN
*-*-*- Initial plays for first player
*               Caps for initial pieces,  l.c. for possible plays
*                           |---|---|---|---|   |---|---|---|---|
FSTP    DC   H'08'          |   |   | x |   |   |   |   | o |   |
        DC   H'2' byte 2    |---|---|---|---|   |---|---|---|---|
        DC   H'04'          |   | X | O | x |   |   | O | X | o |
        DC   H'3' byte 3    |---|---|---|---|   |---|---|---|---|
        DC   H'20'          | x | O | X |   |   | o | X | O |   |
        DC   H'4' byte 4    |---|---|---|---|   |---|---|---|---|
        DC   H'10'          |   | x |   |   |   |   | o |   |   |
        DC   H'5' byte 5    |---|---|---|---|   |---|---|---|---|
        DC   H'00'             Player first       Machine first
*                                   Player always plays X
SNDP    DC   H'04'  To 08,2
        DC   H'2'
        DC   H'04'      Prefered play repeated
        DC   H'2'
        DC   H'10'
        DC   H'2'
        DC   H'04'
        DC   H'4'
*
        DC   H'10'  To 04,3
        DC   H'2'
        DC   H'04'
        DC   H'2'
        DC   H'04'      Prefered play repeated
        DC   H'2'
        DC   H'04'
        DC   H'4'
*
        DC   H'20'  To 20,4
        DC   H'3'
        DC   H'20'
        DC   H'5'
        DC   H'20'      Prefered play repeated
        DC   H'5'
        DC   H'08'
        DC   H'5'
*
        DC   H'20'  To 10,5
        DC   H'3'
        DC   H'20'
        DC   H'5'
        DC   H'20'      Prefered play repeated
        DC   H'5'
        DC   H'08'
        DC   H'5'
* BORD MEN  Generate board image and introduce men
BORD    LR   K,P
        DCI  OBJ0    Do OBJ0 first
        LIS  H'2'
        LR   2,A     2 objects
        LIS  H'6'    OBJ0 has 6 rows
BRD1    LR   0,A
BRD2    LIS  H'9'    9 lines in body of squares
BRD3    LR   1,A
BRD4    LIS  H'8'    8 squares with right vertical
        LR   4,A
        LIS  H'1'    empty except for right vertical
BRD5    ST
        DS   4
        BNZ  BRD5    Another square
        DS   1
        BNZ  BRD4    Now the next line
        LIS  H'8'    and 8 squares with
        LR   4,A
        CLR
        COM          Horizontal line
BRD6    ST
        DS   4
        BNZ  BRD6
        DS   0
        BNZ  BRD2    Now the next row of squares
        DS   2
        BZ   MEN
        DCI  OBJ1    Now fix OBJ1
        LIS  H'2'    with 2 rows
        BR   BRD1
*-*-*- Now put pieces in image
MEN     LISU 3          Active pieces are here
        LISL    0
        LR      A,7     Their color
        LR      4,A     put here
        LIS     H'1'
        LR      0,A     1 for active, 0 for passive
MEN1    LIS     H'7'    To count rows
        LR      1,A
MEN2    LIS     H'7'    To count sqwares
        LR      2,A
        DCI     TAB1
        LR      A,1
        SL      1       Table has 2 bytes per entry
        ADC
        LM              Get Image row start
        LR      QU,A
        LM
        LR      QL,A
        CLR
        AS      I
        BZ      MEN7
        LR      3,A
MEN3    NI      H'1'
        BZ      MEN6
        LR      A,2
        LR      DC,Q
        ADC                     Add in row start
        XDC                     Save
        DCI     BLKP            Anticipate a black piece
        CLR
        AS      4
        BZ      MEN4
        DCI     BLUP            No it is to be white
MEN4    LIS     H'7'            Use 7 lines for piece
        LR      5,A
MEN5    LM
        XDC
        ST
        LIS     H'7'
        ADC
        XDC
        DS      5
        BNZ     MEN5
MEN6    LR      A,3
        SR      1
        LR      3,A
        BZ     MEN7
        DS      2
        BP      MEN3
MEN7    DS      1
        BP      MEN2
        LR      A,4
        COM
        LR      4,A
        LISU    PLOC
        DS      0
        BP      MEN1
        PK
TAB1    DC      H'0F68'         Image row starts
        DC      H'0F18'         (second line in squares)
        DC      H'0DC8'
        DC      H'0D78'
        DC      H'0D28'
        DC      H'0CD8'
        DC      H'0C88'
        DC      H'0C38'
* BLKP BLUP WAST BDAT SEDC TABL
BLKP    DC      B'00111001'
        DC      B'01000101'
        DC      B'01000101'
        DC      B'01000101'
        DC      B'01000101'
        DC      B'01000101'
BLUP    DC      B'00111001'
        DC      B'01111101'
        DC      B'01111101'
        DC      B'01111101'
        DC      B'01111101'
        DC      B'01111101'
        DC      B'00111001'
WAST    LR      K,P        Delay loop to WASTE some time
WAS2    LIS     H'F'
        LR      1,A
WAS3    CLR
        LR      2,A
WAS4    DS      2
        BNZ     WAS4
        DS      1
        BNZ     WAS3
        PK
* UPDATE CONTROL DATA *
*
BDAT    DC   H'1'    FLAG SET SHORT UPDATE
        DC   UDIT:
        DC   UDIT.
        DC   UDIT:
        DC   UDIT.
* Set message length and line pointer
SEDC    DCI  LINE    DCO TO LINE POINTER
        LIS  H'2'
        SL   4       SET FOR SECOND LINE
        ST
        LR   A,0
        SL   4
        LISL 4
        LR   S,A     AND SET MESSAGE LENGTH
        CLR          CLEAR ACC
        LR   1,A     AND SET DEFAULT RESULT
        POP          AND RETURN
*-*-*- Address table for MVC*
TABL    DC   H'0C30'
        DC   H'0C80'
        DC   H'0CD0'
        DC   H'0D20'
        DC   H'0D70'
        DC   H'0DC0'
        DC   H'0F10'
        DC   H'0F60'
* CURS
*-*-*- To move cursor, uses
*SC0,1,2,3,4,HU,Q,K,W, SC20-24.
CURS    LR   K,P
        PI   PUSH    AND PUSH IT ON TO STACK
MAP0    PI   MWAD    WAIT, THEN UPDATE
        LIS  H'1'    CAN START JOYREAD
        LR   HU,A    SET FOR HORIZONTAL POT
        PI   JOYI    AND READ
        LR   VX,A    SAVE RESULT IN VX
        LIS  H'0'
        LR   HU,A    SET FOR VERTICAL POT
        PI   JOYI
        LR   0,A     SAVE IN REG 0
        PI   AMAP    CONVERT TO PROPER VELOCITY
        LR   VY,A    SAVE RESULT
        LR   A,VX
        LR   0,A     NOW GET UNCOVERTED VX INTO R0
        PI   AMAP    CONVERT IT
        LR   VX,A    AND SAVE IT
        PI   MWAD    WAIT, THEN UPDATE
        PI   BLNK    To blink code (on)
        LIS  H'4'
        LR   0,A
MP01    PI   MWAD    A second wait
        DS   0
        BNZ  MP01
        PI   BLNK    To blink code (off)
        CLR          CLEAR ACC
        XS   VX      VX IN W/STATUS
        BZ   MAP7    NON-NULL X COMPONENT?
        DCI  XPOS    YES
        LM
        LR   X,A     SET CURRENT X POSITION
        LISU 2
        LISL 0
        CLR
        LR   I,A     SP20<=0
        LM
        LR   I,A     SP21<=NON NULL LEAD MASK
        LM
        LR   S,A     SP22<=TRAILING MASK
        CLR
        XS   VX      VX IN W/STATUS
        BM   MAP3    GOING LEFT?
        PI   SHR     SHIFT RIGHT ONE
        LIS  H'7'    NO, GOING RIGHT.
        XS   X
        BNZ  MAP5    IN RH MOST BOX?
        LISL 2       YES
        XS   S
        BZ   MAP5    TRIED TO GO TOO FAR?
MAP2    CLR  YES.
        LR   VX,A    CLEAR X VELOCITY
        BR   MAP7    AND CHECK Y
MAP3    PI   SHL     SHIFT LEFT ONE
        CLR
        XS   X
        BNZ  MAP4    IN LH MOST BOX?
        LISL 0       YES
        XS   S
        BNZ  MAP2    TRIED TO GO TOO FAR?
MAP4    LISL 0
        CLR
        XS   S
        BZ   MAP7    IS SP20 NULL?
        LISL 1       NO.
        LR   A,I
        LR   S,A
        LISL 0
        LR   A,I
        LR   D,A
        CLR
        LR   S,A     SP22<=SP21,SP21<=SP20,SP20<=0,THAT ORDER
        DS   X       AND DECREMENT X COUNT
        BR   MAP7    NOW GO CHECK Y
MAP5    LISL 1
        CLR          CLEAR ACC
        XS   S
        BNZ  MAP7    IS SP21=0?
        LISL 2
        LR   A,D
        LR   I,A
        CLR
        LR   D,A     SP21<=SP22,SP22<=0, THAT ORDER
        LIS  H'1'
        AS   X
        LR   X,A     INCREMENT X COUNT
MAP7    CLR
        XS   VY
        BZ   MAP9    VY=0?
        DCI  YPOS    NO, SET DCO TO LAST Y POSITION
        AM           UPDATE Y COORD
        BM   MP7A    Result Y is neg?
        CI   MAXY    COMPARE W/MAX ALLOWED Y
        BC   MAP8    NEW Y>MAX ALLOWED VALUE?
MP7A    CLR  YES
        LR   VY,A    RESET VY
        BR   MAP9
MAP8    LR   Y,A     SET NEW Y
MAP9    LR   A,VY    GET VY
        SL   1
        XS   VX
        BZ   MP12    ANY MOVEMENT?
        PI   MVC     YES, REMOVE OLD POSITION
        CLR
        XS   VY
        BZ   MP10    ANY Y MOVEMENT?IF NOT, MUST HAVE VX NE 0
        DCI  YPOS
        LR   A,Y     IS, SO RESET
        ST           Y POSITION
        CLR
        XS   VX
        BZ   MP11    ANY X MOVEMENT?
MP10    DCI  XPOS    UPDATE X POSIT & MASK
        LR   A,X
        ST
        LISL 1
        LR   A,I
        ST
        LR   A,S
        ST
MP11    PI   MVC     DISPLAY NEW POSITION
MP12    CLR
        OUTS 1       Clear port 1
        NOP          3 NOP's for FCC
        NOP          Do not remove
        NOP          for any reason
        INS  1       Get buttons
        NI   H'1'    Strip to desired one
        DCI  BFLG    To button flag
        CLR
        BNZ  MP13    Any button input?
        ST           No, reset edge flag
MP14    JMP  MAP0    And go try again
MP13    LR   Q,DC    Save address
        XM           Flag in W/STATUS
        BNZ  MP14    Previous input?
        LIS  H'1'    No, reset flag
        LR   DC,Q    Recover address
        ST           And reset
CON     CLR
        LR   0,A     Set counter (Y conversion)
CON1    LR   A,Y     Get Y coordinate
        CI   YTST    Compare W/test value
        BC   CON2    Y LE test value?
        LR   A,0     No, increment counter
        INC
        LR   0,A
        LI   -H'A'
        AS   Y
        LR   Y,A     Y<=Y-H'A'
        BR   CON1    Go back and try agian
CON2    LR   A,0     Get counter
        LR   VY,A    VY now↑(0-7):(top-bottom)
        LIS     H'8'
        SL      4
CON3    DS      X
        BM      CON4
        SR      1
        BR      CON3
CON4    LR      VX,A    VX contains the byte
        PI   MWAD    WAIT, THEN UPDATE
        PI   ENIN    ENABLE INTERRUPT DRIVEN UPDATE
        PI   POPS    POP RETURN ADDRESS
        PK           AND RETURN
* MVC AMAP BLNK
*-*-*- MVC Set or remove cursor
MVC     LR   K,P   SAVE RETURN ADDRESS
        DCI  XPOS
        LM
        LR   0,A     SAVE X IN R0
        LISU 2
        LISL 3
        LM
        LR   I,A
        LM
        LR   D,A     LEAD IN SP23,TRAIL IN SP24
        DCI   YPOS
        LM           GET Y COORDINATE
        DCI  H'0C30' DCO TO OBJ0 BASE ADDRESS
        ADC          ADD 8 X Y COORD (W/MAX FOR Y
        ADC          OVER H'40', CANNOT USE "CUTE"
        ADC          TRICKS HERE--AND FOR SPEED,
        ADC          WE JUST USE STRAIGHT ADC'S).
        ADC
        ADC
        ADC
        ADC
        LR   A,0     GET X OFFSET
        ADC          AND ADD IT IN
        LIS  CHT
        LR   0,A     SET COUNT FOR TRANSFER
MVC1    LR   Q,DC    SAVE ADDRESS IN Q REG
        LR   A,QU    GET HO ADDRESS
        CI   H'E'
        BNZ  MVC2    AT BOTTOM OF OBJ0
        LR   A,QL    DEFINITELY.
        CI   H'F'
        BC   MVC2    PAST BOTTOM?
        LIS  H'F'    YES.
        LR   QU,A    RESET HO ADDRESS
        LR   DC,Q    AND RESET DCO ACCORDINGLY (FOR OBJ1)
MVC2    LR   A,I     GET LEAD MASK BYTE
        LR   Q,DC    SAVE DCO
        XM           XOR IN CURSOR
        LR   DC,Q    RECOVER ADDRESS
        ST           AND RESET THAT BYTE
        LR   Q,DC    SAVE ADDRESS AGAIN
        LR   A,D     GET TRAILING MASK BYTE
        XM           XOR IN BITS
        LR   DC,Q    RECOVER ADDRESS
        ST           AND RESET DATA
        LIS  H'6'
        ADC          SET TO NEXT DESTINATION
        DS   0       DECREMENT COUNTER
        BNZ  MVC1    DONE?
        PK           YES, RETURN
*-*-*- AMAP Mapping joystick readings to velocities
AMAP    LR   A,0     GET READING
        CI   H'40'
        BNC  AMP1    VAL LE H'40'?
        CLR
        COM          YES.
        BR   AMP2
AMP1    CI   H'C0'
        CLR
        BC   AMP2    VAL GT H'C0'=D'192'
        LIS  H'1'    YES, VELOCITY = 1
AMP2    POP          RETURN
*-*-*- BLNK  Blinking routine
BLNK    LR   K,P
        DCI  BLNF    Test BLINK flag
        CLR
        XM
        BZ   BLN4    Need to blink?
        LISU 2
        LISL 3
        LM           Yes
        LR   I,A     Get X value
        LM
        LR   D,A     and Y value to blink
***     DCI  COL0
        CLR
        XM
        BZ   BLN0    Need to reverse?
        LIS  H'7'
        XS   S
        LR   I,A
        LIS  H'7'
        XS   S
        LR   D,A
BLN0    DCI  H'0C30'-H'50' DC0 TO OBJ0-H'50'
        LISL 4
        LIS  H'5'
        SL   4
BLN1    ADC          Add off-set
        DS   S
        BP   BLN1    Added enough?
        LR   Q,DC    Yes
        LR   A,QU    Get H0 address
        CI   H'E'
        BNZ  BLN2    Need reset?
        LIS  H'F'    Yes
        LR   QU,A
BLN2    LR   DC,Q
        LISL 3
        LR   A,S
        ADC          Add off-set
        LIS  H'3'
        LR   0,A     Set counter
BLN3    LR   Q,DC
        LIS  H'C'
        SL   4
        XM
        LR   DC,Q
        ST
        LIS  H'7'
        ADC          Next one to blink
        DS   0       Decrement counter
        BNZ  BLN3    Done?
BLN4    PK
* INIT TY0 AMP BLNK UDIT YMF SKL
INIT    DC   H'30'
        DC   H'10'   OBJ1 L.O. RP
        DC   H'5F'   TEXT LOW ORDER ROM
        DC   H'2C'   OBJ0 H.O.RP+COLOR
        DC   H'2F'   OBJ1 H.O.RP+color
        DC   H'EE'
        DC   H'48'   OBJ0 DELTA X ---
        DC   H'48'   OBJ1 DELTA X---
        DC   H'70'   TEXT OBJECT DELTA X
TY0     DC   H'3C'   OBJ0 DELTA Y ----
        DC   H'14'   OBJ1 DELTA Y ---
        DC   H'07'   TEXT OBJECT DELTA Y
        DC   H'0D'   OBJ0-X-CO
        DC   H'0D'   OBJ1 X-CO
        DC   H'1C'   TEXT OBJECT X COORD
        DC   H'48'   OBJ0 Y-VALUE L.O.A
        DC   H'C0'   OBJ1 Y-VALUE L.O.A
        DC   H'26'   TEXT OBJECT Y VAL LO A
        DC   H'00'   OBJ0 Y-VALUE H.0 &X-ORDER
        DC   H'01'   OBJ1- Y-VAL H.O.$X-ORDER
        DC   H'82'   TEXT OBJ INITIALLY OFF
UDIT    DC   H'30'
        DC   H'10'
        DC   H'5F'
        DC   H'2C'
        DC   H'2F'
        DC   H'EE'
        DC   H'3C'
        DC   H'14'
        DC   H'07'
*-*-*- YMF
YMF     DC   H'0513' Y0
        DC   H'0300' U-
        DC   H'2527' PL
        DC   H'1105' AY
        DC   H'00'   -
        DC   H'1D'   F
        DC   H'0109' IR
        DC   H'2107' ST
        DC   H'00'   -
        DC   H'35'   ?
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'0500' Y-
        DC   H'1309' OR
        DC   H'00'   -
        DC   H'2B'   N
*-*-*- SKL Skill text
SKL     DC   H'0713' TO
        DC   H'00'   -
        DC   H'2527' PL
        DC   H'1105' AY
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'0705' TY
        DC   H'250B' PE
ABE     DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'112D' AB
        DC   H'0B00' E-
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'11'   A
        DC   H'00'   -
BETY    DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'2D0B' BE
        DC   H'0707' TT
        DC   H'0500' Y-
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'2D'   B
        DC   H'00'   -
CHAS    DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'3119' CH
        DC   H'1109' AR
        DC   H'2701' LI
        DC   H'0B00' E-
        DC   H'00'   -
        DC   H'00'   -
        DC   H'31'   C
        DC   H'00'   -
DORT    DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'1F13' DO
        DC   H'0913' RO
        DC   H'0719' TH
        DC   H'0500' Y-
        DC   H'00'   -
        DC   H'00'   -
        DC   H'1F'   D
        DC   H'00'   -
* MWAD RASC SCRA SCRD
* MWAD  Wait then update and keep the X ZOOM
* bit set properly during display maintenance
MWAD    LR   K,P     SAVE RETURN ADDRESS
        PI   PUSH    AND PUSH ONTO STACK
        PI   DAI     DISABLE INTERRUPTS
        PI   WAIT    WAIT ON APPROPRIATE LINE
        DCI  CMRG    DCO TO PROG COPY COMREG
        LI   MSK     MASK IN
        XM           TURN OFF XZOOM
        DCI  H'8F7'  IN THE UM1 COPY
        ST           ONLY
        PI   UDAT    NOW DO UPDATE
        LI   XZOP    SET LINE FOR RESTORE XZOOM
MWD1    DCI  H'8FB'  DCO TO CURRENT LINE
        CM           COMPARE
        BNZ  MWD1    REACHED IT YET?
        DCI  CMRG    YES
        LM
        DCI  H'8F7'  NOW RESET UM1 COPY
        ST
        PI   POPS    POP RETURN ADDRESS
        PK           AND RETURN
*-*-*- Interrupt enable for update
ENIN    LI   INHR:
        OUTS H'C'
        LI   INHR.
        OUTS H'D'    SET INTERRUPT VECTOR
        DCI  H'8F0'
        LI   ULIN
        ST           SET INTERRUPT LINE
        DCI  CMRG    DCO TO PROG COPY COMREG
        LR   Q,DC    SAVE ADDRESS IN Q RES
        LIS  H'8'
        OM
        LR   DC,Q
        ST           IN PROGRAM COPY
        DCI  H'8F7'
        ST           DITTO UM1 COPY
        LIS  H'1'
        OUTS H'E'    ENABLE SMI...
        EI           ENABLE CPU
        LR   J,W     SAVE SAME STATUS
        POP          AND RETURN
*-*-*- Interrupt disable
DAI     DI           DISABLE CPU INTERRUPT
        LR   J,W     SET J ACCORDINGLY
        DCI  CMRG    DCO TO PROG COPY COMREG
        LR   Q,DC    SAVE ADDRESS
        LIS  H'8'
        COM
        NM           TURN OFF BIT
        LR   DC,Q    IN THE
        ST           PROGRAM COPY,
        DCI  H'8F7'
        ST           AND THE UM1 COPY
        CLR
        OUTS H'E'    NOW DISABLE SMI
        POP          AND RETURN
*-*-*- RASC RAM to SC transfer
RASC    LR      K,P             RAM to SC
        LISU    ALOC            SC buffer with Active
        LISL    0
RAS2    LM
        LR      I,A
        BR7     RAS2
        LM
        LR      I,A
        LISU    PLOC
RAS3    LM
        LR      I,A
        BR7     RAS3
        LM
        LR      I,A
        PK
*  SCRA  SC to RAM with side reversal
SCRA    LR      K,P             SC to RAM for side reversal
        LISU    PLOC
        LISL    0
SCR1    LR      A,I
        ST
        BR7     SCR1
        LR      A,I
        ST
        LISU    ALOC
        LISL    0
SCR2    LR      A,I
        ST
        BR7     SCR2
        LR      A,I
        ST
        PK
*  SCRD  SC to RAM direct
SCRD    LR      K,P             SC to RAM for side reversal
        LISU    ALOC
        LISL    0
SCD1    LR      A,I
        ST
        BR7     SCD1
        LR      A,I
        ST
        LISU    PLOC
        LISL    0
SCD2    LR      A,I
        ST
        BR7     SCD2
        LR      A,I
        ST
        PK
* INHR
* Interrupt handler, saves and restores data
INHR    LR   8,A     SAVE ACC
        LR   A,IS
        LISU 6
        LISL 0
        LR   I,A     SAVE ISAR IN REG O'60'
        LR   A,HU
        LR   I,A     SAVE HU IN REG O'61'
        LR   A,HL
        LR   I,A     SAVE HL IN REG O'62'
        LR   A,J
        LR   I,A     SAVE J REG IN REG O'63'
        LR   H,DC    SAVE OLD DCO
        DCI  RGSV    DCO TO SAVE AREA START
        LR   A,HU
        ST
        LR   A,HL
        ST           SAVE OLD DCO IN RGSV,RGSV+1
        XDC
        LR   H,DC
        XDC
        LR   A,HU
        ST
        LR   A,HL
        ST           SAVE OLD DC1 IN RGSV+2,RGSV+3
        LR   A,KU
        ST
        LR   A,KL
        ST           SAVE K REG IN RGSV+4,RGSV+5
        LR   K,P     PC1 INTO K REGISTER
        LR   A,KU
        ST
        LR   A,KL
        ST           PC1 INTO RGSV+6,RGSV+7
        LR   J,W     SAVE OLD STATUS
        LISU 2
        LISL 3
INH2    LR   A,D
        ST           SP23,22,21,20 IN, RESP.
        BR7  INH2    RGSV+8,+9,+A,+B
        DCI  CMRG    DCO TO COMMAND REGISTER
        LI   MSK     MASK ON
        XM           TURN OFF X ZOOM BIT
        DCI  H'8F7'  IN THE UM1
        ST           COMMAND REGISTER
        PI   UDAT    UPDATE UM1 DISPLAY REGISTERS
        LI   XZOP    SET LINE FOR XZOOM ON
INH1    DCI  H'8FB'  DCO TO CURRENT Y LO
        CM           COMPARE
        BNZ  INH1    DIFFERENT?
        DCI  CMRG    NO. RESTORE X ZOOM
        LM           FROM OLD COPY
        DCI  H'8F7'  TO THE UM1 COPY
        ST
*
* RESTORE ALL REGISTERS
*
        DCI  RGSV    DCO TO SAVE AREA
        LM
        LR   HU,A
        LM
        LR   HL,A    OLD DCO TO H REG
        XDC
        LR   DC,H    NOW INTO DCO
        XDC          AND INTO DC1
        LM
        LR   HU,A
        LM
        LR   HL,A    OLD DC1 INTO H REGISTER
        LIS  H'2'
        ADC          BYPASS K FOR A MOMENT
        LM
        LR   KU,A
        LM
        LR   KL,A
        LR   P,K     RESTORE PC1
        LISU 2
        LISL 3
INH3    LM           RESTORE SP20-23 FROM
        LR   D,A     RGSV+8,+9,+A,+B
        BR7  INH3
        DCI  RGSV+4
        LM
        LR   KU,A
        LM
        LR   KL,A    RESTORE K REGISTER
        LR   DC,H    RESTORE DC1
        XDC          AND SET DCO&DC1 PROPERLY
        LR   W,J     NOW RESTORE STATUS AT ENTRY
*
* NOW RESTORE J,H,A FROM SCRATCH PAD
*
        LISU 6
        LISL 3
        LR   A,D     GET J
        LR   J,A
        LR   A,D     GET HL
        LR   HL,A
        LR   A,D
        LR   HU,A    RESTORE HU
        LR   A,D     GET ISAR
        LR   IS,A    RESTORE ISAR
        LR   A,8     RESTORE A
        EI           INT. ENABLE
        POP
* STOP at end of game
STOP    LISU    ALOC
ST2     LISL    7
        CLR
        LR      SN,A
ST3     CLR
        AS      D
        BZ      ST5
ST4     LR      1,A             Count them
        DS      SN
        CLR
        COM
        AS      1
        NS      1
        BNZ     ST4
ST5     BR7     ST3
        LR      A,SN
        COM
        INC
        LR      4,A             Save player's score
        LR      A,SN
        AI      H'40'
        LR      5,A             and machine's score
        LR      DC,H
        PI      RASC
        PI      BORD
        LR      A,SN
        AI      H'20'
        BZ      ST5A            Tie case
        BM      ST6             You win
        LR      A,4             Reverse scores for machine win
        LR      0,A
        LR      A,5
        LR      4,A
        LR      A,0
        LR      5,A
        LIS     H'7'            "I WIN "
        BR      ST7
ST5A    LIS     H'4'            "IT'S A TIE GAME
        BR      ST7
ST6     LIS     H'8'            "YOU WIN "
ST7     LR      0,A
        PI      WMC             Write message
        PI      MWAD            Wait then update
        LR      A,0
        CI      H'6'
        BP      ST10            No score to report
WSC1    CLR
        LR      2,A             The ten digit
        LR      A,4
WSC2    CI      H'9'
        BP      WSC3            Less than 10
        AI      H'F6'           Subtract 10
        DS      2               Accumulate ten's
        BR      WSC2
WSC3    LR      4,A
        LR      A,2
        COM
        INC
        BZ      WSC4            No ten digit
        LR      TEMP,A
        PI      WDG             Write ten digit
WSC4    LR      A,4
        LR      TEMP,A
        PI      WDG             Write unit digit
        PI      MWAD
        CLR
        AS      5
        BZ      WSC5            Both numbers reported
        LR      4,A
        CLR
        LR      5,A             Set to 0 for exit
        LI      H'1C'           Introduce a -
        LR      TEMP,A
        PI      WC
        BR      WSC1
WSC5    PI      MWAD            Wait then update
ST10    PI      ENIN            Enable interrupts
        LIS     H'7'
        SL      4

        LR      3,A
STO3    PI      WAST            Leave message up awhile
        DS      3
        BNZ     STO3
STO4    PI   MWAD    Do wait, then update
        DCI  H'872'
        LI   H'82'
        ST           TURN MESSAGE OFF
        LR   A,0     Get message type
        LR   6,A     And save in REG 6
ZS0     LIS  H'D'
        LR   1,A     Set NOTE COUNT (14 NOTES)
ZS1     LIS  H'7'    Set mask
        XS   6
        DCI  TUN2    Default tune--for Player win
        BNZ  ZS2     Computer wins?
        DCI  TUN1    Yes, set tune accordingly
ZS2     LR   A,1     Get current NOTE COUNT
        SL   1
        AS   1       Mult by three for proper offset
        ADC          And add it in
        LISU 4
        LISL 4
        LM           Get DELTA LINE count
        LR   D,A     Into SP44
        LM
        LR   S,A     Get LEVEL into SP43
        LM           And get DURATION into
        LR   5,A     REG 5
        PI   SNE     Enable sound
ZS3     PI   WAUD    And wait
        DS   5       Decrement DURATION
        BNZ  ZS3     Done with NOTE?
        DS   1       Yes, decrement NOTE COUNT
        BP   ZS1     Done all of SONG?
        LIS  H'A'   YES
        SL   4
        LR   1,A     Set counter
ZS4     PI   MWAD    Delay
        DS   1       For approximately
        BNZ  ZS4     2.7 Seconds
        JMP  H'4000' And return to RESIDENT
* FLSH
FLSH    DCI  PNUM    DCO to play number
        LIS  H'2'
        CM
        BC   FLS5    PAST BOOK MOVES?
        PI   BORD    NO, JUST DISPLAY BOARD
FLS6    JMP  PMOV    AND GO PLAYERS MOVE
FLS5    PI   MWAD    WAIT, THEN UPDATE
        DCI  H'872'  DISABLING INT. AT SAME TIME
        LI   H'82'
        ST           TURN OFF MESSAGE OBJECT
        LISU 4
        LISL 4
        LIS  H'3'
        SL   4
        LR   D,A     SET DELTA LINE
        LIS  H'3'
        LR   S,A     SET LEVEL
        PI   SNE     ENABLE SOUND
        LIS  H'F'
        LR   6,A     SET DURATION
FLS1    PI   WAUD    WAIT, THEN UPDATE
        DS   6
        BNZ  FLS1    BEEPED LONG ENOUGH?
        PI   DAI     YES, DISABLE SOUND
        LIS  H'5'
        LR   6,A     SET BLINK COUNT
FLS2    DCI  TRE2
        PI   RASC    GET BOARD AFTER PLAYER MOVE
        PI   WAUD    NOW DO UPDATE
        PI   ENIN
        LR      A,7
        COM
        LR      7,A
        PI   BORD    DISPLAY BOARD
        LR      A,7
        COM
        LR      7,A
        LIS  H'2'
        SL   4
        LR   3,A     SET COUNTER
FLS3    PI   MWAD    WAIT A BIT
        DS   3
        BNZ  FLS3
        DCI  TREE
        PI   RASC    BOARD AFTER MACHINE MOVE
        PI   ENIN
        PI   BORD    DISPLAYED
        LIS  H'2'
        LR   3,A
FLS4    PI   MWAD    WAIT A MOMENT
        DS   3
        BNZ  FLS4
        DS   6
        BNZ  FLS2    DONE ENOUGH TIMES?
        DCI     PLMV            Players moves found?
        CLR
        XM
        BNZ     FLS6            Yes, go to PMOV
        LIS     H'2'            Machine to play again
        LR      0,A
        PI      WMC
        PI      WAST
        CLR
        INC
        LR      0,A
        PI      WMC
        CLR
        INC
        SL      4
        AS      HL
        LR      DC,H
        DCI     TRE2
        LR      H,DC
        LR      A,7
        COM
        LR      7,A
        JMP     FIND            Find another machine play
* SELE FLIP FORE
SELE    PI      SEE
        LR      A,HL
        SR      4
        SL      1
        DCI     PLAY-2
        ADC
        LR      Q,DC
        LM
        LR      0,A
        LM
        LR      BN,A
        CLR
        AS      0
        BNZ     SEL3
        JMP     NEXT
SEL3    CLR
        COM
        AS      0
        NS      0
        LR      DC,Q
        ST                      Return byte with 1 bit removed
        XS      0               Get byte with selected bit on
        LR      BY,A
        DCI     ESAV
        ST                      Save for repeated use
        LI      ISA
        AS      BN
        LR      IS,A            Location to add bit
        LR      A,S
        AS      BY
        LR      S,A             New piece added
        LIS     H'E'            Start here and then DS
        LR      DR,A            8 directions, 2 bytes per entry
        DCI     SFLG
        CLR
        COM
        ST
SEL4    PI      MSUB            Returns values in DR and CV
        CLR                     with bit on in BY if string
        XS      BY              is found in this direction
        BZ      SEL5            No flanked string found
        DS      CV              decrease count for termination
FLIP    LR      A,CV
        LR      0,A
        CLR
FLP2    AS      FB
        DS      0
        BNZ     FLP2            Aaccumulate byte shift 
        AS      BN              Add in initial position
        AI      ISA             this all for where active
        LR      IS,A            piece will appear
        LR      A,CV
        LR      0,A
* Shift in the reverse direction to that used in MSUB
        CLR
        XS      RL              Is abit shift required?
        DCI     ESAV
        LM                      Get prepared with bit
        BZ      FLP5            No
        BM      FLP4            Which direction?
FLP3    SL      1
        DS      0
        BNZ     FLP3            Accumulate necessary SL's
        BR      FLP5
FLP4    SR      1
        DS      0
        BNZ     FLP4            Accumulate necessary SR's
FLP5    LR      BY,A            Save for use with passive
        XS      S               Introduce active piece
        LR      S,A             and save
        LISU    PLOC
        LR      A,BY
        XS      S               Remove passive piece
        LR      S,A             and save
        DS      CV              Back up 1 along string
        BNZ     FLIP            Still another piece to flip
SEL5    DS      DR              Next direction?
        DS      DR
        BP      SEL4            Yes
* All flippable strings flipped
* FORE
FORE    PI      SEE
        LR      A,HL
        SL      4
        CI      H'2'            Where are we?
        BP      FOR5            Player's or first machine's play
        CI      H'D'            Out of space?
        DCI     DNUM-2          Prepare for depth checking
        ADC
        LR      Q,DC
        LM
        LR      0,A
        BZ      FOR3            Yes, out of space
        XDC
        DCI     PLY0
        CM                      At PLY0?
        BZ      FOR3            Yes
        DCI     PNUM
        AM
        CI      H'40'           At 64th play?
        BNZ     FOR4            No
FOR2    JMP     EVAZ            To piece eval only
FOR3    DCI     PNUM
        AM
        CI      H'40'
        BZ      FOR2
        JMP     EVAL            To normal EVAL
FOR4    LR      A,7             Normal advance
        COM
        LR      7,A
        LR      DC,Q            Get DNUM back
        LM
        INC                     Increment and advance it
        ST
        LIS     H'1'
        SL      4
        AS      HL
        LR      HL,A
        SR      4
        DCI     SCOR-3          Score back 2 (+ offset)
        ADC
        LM
        CM                      Only to index
        ST                      Advance score by 2
        LR      DC,H
        PI      SCRA
        JMP     FIND
FOR5    BZ      FOR7            Machine's first play
        PI      BORD            Show board after players move
        DCI     DNUM
        CLR
        ST
        INC
        ST
        LIS     H'1'
        LR      0,A
        PI      WMC             Clear brow wrinkling area
        DCI     SCOR            Preset score
        LI      H'C1'
        ST
        ST
        ST
        DCI     PNUM
        LR      Q,DC
        LM
        INC                     Add 1 to play count
        LR      DC,Q
        ST
        CI      H'40'
        BNZ     FOR6
        JMP     STOP            Stop after player's play
FOR6     CI      H'1'
        BNZ     FOR4            OK to go forward
        LR      A,7
        COM
        LR      7,A
        DCI     TRE2
        LR      H,DC
        PI      SCRA
* Machine to make 2nd move from book
        LISU    2               Get random number
        LISL    5
        LIS     H'3'
        NS      S               0 to 3 random number
        LR      0,A
        DCI     BKMV            Get stored move munber
        LM
        SL      1               Make room for random selection
        SL      1
        AS      0               Random choice between them
        SL      1               2 bytes per entry
        DCI     SNDP            Stored table of book replies
        ADC
        LM                      Get reply byte
        LR      BY,A
        LM                      and the byte #
        LR      BN,A       
        DCI     PLAY+2
        LR      A,BY
        ST
        LR      A,BN
        ST
        LR      DC,H
        PI      RASC            RA to SC as required by SELE
        JMP     SELE
FOR7    DCI     DNUM
        CLR
        ST
        DCI     PNUM
        LR      Q,DC
        LM
        CI      H'1'            Did we come from a book move?
        BM      FOR8            No
        INC                     Yes, increment PNUM
        LR      DC,Q
        ST
        LR      A,7             Change sides
        COM
        LR      7,A
        DCI     TREE            Back to player's board
        LR      H,DC
        PI      SCRA
        JMP     FIND            To find possible player's plays 
FOR8    CI      H'3F'           Is this the last play?
        BNZ     FOR9            No, so go forward
        JMP     STOP            Stop on machine's play
FOR9    JMP     FOR4
* MSUB Subroutine to locate all plays in specified byte
MSUB    LR      K,P
MS2     LR      A,DR
        DCI     MTAB
        ADC
        LM
        LR      RL,A            R or L info
        LM
        LR      FB,A            F or B info
        DCI     ESAV            Recall starting byte
        LM
        LR      BY,A
        LIS     H'1'            Single R or L and single
        LR      CV,A            F or B to start
MS4     LR      A,CV            Loop begins here
        LR      0,A
        CLR
MS5     AS      FB
        DS      0
        BNZ     MS5             Accumulate byte shifts
        AS      BN              Starting byte 
        BM      MS9             Woops too far
        CI      H'7'
        BM      MS9             Woops again
        AI      ISP             Looking at passive pieces
        LR      IS,A            Location of passive byte to consider
        LR      A,CV
        LR      0,A             Reset counter
        CLR
        XS      RL              Set status from RL
        LR      A,S             And get passive byte
        BZ      MS8             No shift required
        BM      MS7             Left shifts called for
MS6     SR      1               Right shifts called for
        DS      0
        BNZ     MS6             Accumulate shifts
        BR      MS8
MS7     SL      1               Do the left shifts
        DS      0
        BNZ     MS7             Accumulate shifts
MS8     NS      BY
        LR      BY,A
        BNZ     MS10            Still a string
MS9     DS      DR              Any more directions?
        DS      DR              Remember, 2 bytes per entry
        BP      MS2             Try next direction
        PK                      Zero return in A
MS10    LR      A,CV
        INC                     Add to count along string
        LR      CV,A
        LR      0,A
        CLR
MS11    AS      FB              Now look for Active termination
        DS      0               Accumulate the F's or B's
        BNZ     MS11
        AS      BN              Add in initial byte number
        BM      MS9             Out of range
        CI      H'7'
        BM      MS9             Out of range
        AI      ISA             and the Active start
        LR      IS,A
        LR      A,CV
        LR      0,A             Reset counter
        CLR
        AS      RL              Only to Set status for R or L
        LR      A,S
        BZ      MS14            No shifts needed
        BM      MS10            Left shifts called for
MS12    SR      1               Shift right
        DS      0
        BNZ     MS12            Accumulate shifts
        BR      MS14
MS13    SL      1               Shift left
        DS      0
        BNZ     MS13            accumulate shifts
MS14    NS      BY              And to the surviving bits
        BZ      MS4             Maybe a continuing string
        LR      0,A             Save temporarily
        DCI     SFLG            SELE or FIND source?
        CLR
        XM      
        BZ      MS15            From FIND
        LR      A,0
        LR      BY,A
        PK                      A flanked string found
MS15    LR      A,HL
        SR      4
        SL      1
        DCI     PLAY-2
        ADC
        LR      Q,DC
        LR      A,0
        OM
        LR      DC,Q
        ST
        JMP     MS4
* NEXT PFND FIND
NEXT    PI      SEE
        CLR
        COM                     -1 indicated NEXT entry
        LR      BN,A            Use BN as temporary flag
        BR      FN1
PFND    LR      DC,H
        PI      RASC
        CLR
        LR      BN,A           Start at 0 for PFND
        INC
        BR      FN1
FIND    PI      SEE
        LR      DC,H
        PI      RASC            Get data into SC
        CLR                     0 indicates initial FIND
        LR      BN,A            Start at 0 for FIND
FN1     DCI     FFLG            Flag
        ST
        LR      A,HL
        SR      4
        SL      1
        DCI     PLAY-2
        ADC
        LR      Q,DC            Later used to store byte
        CLR
        ST                      Set byte to 0
        XS      BN              From NEXT?
        BZ      FN2             No
        LM                      Get last used byte #
        BR      FN5A            and index it
FN2     LR      BN,A            The starting byte #
        LI      ISA             Active pieces
        AS      BN              Initial byte off-set
        LR      IS,A            The active byte to start
        LR      A,S             and the byte of active pieces
        LISU    PLOC
        AS      S               Add in the passive pieces
        COM
        BZ      FN5             No empty squares in this row
        DCI     ESAV            Save for future use
        ST                      The empty squares in starting byte
        LIS     H'E'            8 double-byte entries
        LR      DR,A            The direction under investigation
        DCI     SFLG
        CLR
        ST
FN3     PI      MSUB            Locate a string
        LR      A,HL
        SR      4
        SL      1
        DCI     PLAY-2
        ADC
        CLR
        LM
        BZ      FN5             No string found
        LR      A,BN
        ST                      Store byte #
        LR      A,HL
        CI      H'10'           Player's board?
        BZ      FN4             Yes
        JMP     SELE            No, so go ahead
FN4     XDC
        DCI     PLMV
FN4A    LR      Q,DC
        CLR
        AM
        BNZ     FN4A            Find empty location
        LR      DC,Q
        XDC
        LM                      Move data from PLAY
        XDC                             
        ST                      to PLMV
        XDC
        LM
        XDC     ST
        LR      A,HL
        SR      4
        SL      1
        DCI     PLAY-2
        ADC
        CLR
        ST                      Set back to 0 for next row
FN5     LR      A,BN            No strings from this row
FN5A    INC
        LR      BN,A
        CI      H'8'
        BNZ     FN2             Try the next row
        LR      A,HL
        CI      H'10'
        BNZ     FN6
        JMP     FLSH            Report machine's play
FN6     DCI     FFLG
        CLR
        LM
        BP      FN7
        JMP     AFT             From NEXT so back up
FN7     LR      A,HL
        CI      H'20'
        BZ      FN10            Must tell player to play again
FN8     DCI     PLAY-2          Let other side play again
        LR      A,HL            after fixing PLAY
        SR      4
        SL      1
        ADC
        CLR
        ST                      Store a null byte
        LIS     H'7'
        ST                      and 7 as the byte #
        LR      A,7
        COM
        LR      7,A
        LR      A,HL
        SR      4
        AI      -H'1'
        DCI     DNUM            Also fix DNUM
        ADC
        LR      Q,DC
        CLR
        COM                     Set back for passed board
        AM
        LR      DC,Q
        ST
        ST                      Advance DNUM without incrementing
        LR      A,7             Reverse sides
        COM
        LR      7,A
        LIS     H'1'            Advancs HL
        SL      4
        AS      HL
        LR      HL,A
        SR      4
        DCI     SCOR-3          Advance score
        ADC
        LM
        CI     H'CA'
        CM                      To index only
        BM      FN9
        INC
FN9     ST
        LR      DC,H
        BR      FN11
FN10    LIS     H'3'            "I CAN NOT PLAY"
        LR      0,A
        PI      WMC
        LR      A,7
        COM
        LR      7,A
        DCI     TREE
        LR      H,DC
FN11    PI      SCRA
        JMP     FIND
* Table defining R or L shift and F or B direction
MTAB    DC      H'FF'           LB
        DC      H'FF'
        DC      H'FF'           LL
        DC      H'0'
        DC      H'FF'           LF
        DC      H'1'
        DC      H'0'            BB
        DC      H'FF'
        DC      H'0'            FF
        DC      H'1'
        DC      H'1'            RB
        DC      H'FF'
        DC      H'1'            RR
        DC      H'0'
        DC      H'1'            RF
        DC      H'1'
* AFT No more plays found so time to back up
AFT     PI      SEE
        LR      A,HL            Prepare to back up
        SR      4
        CI      H'2'
        BNZ     AFT0            Not at end of tree search
*Prepare for verification of player's reply
        DCI     TREE
        LR      H,DC            BACK TO PLAYER'S BOARD
        LR      A,7
        COM                     Reverse sides
        LR      7,A
AFTB    DCI     PNUM            Entry after book move
        LR      Q,DC
        LM
        INC
        LR      DC,Q
        ST
AFTZ    DCI     PLMV            This space is overwritten
        CLR                     Clear first byte
        ST
        JMP     PFND            Get verification info for play
AFT0    DCI     SCOR-1          SCOR reference
        ADC
        LR      Q,DC
        LM
        LR      SN,A           The score # for current board
AFTE    LR      A,HL            Entry from EVAL
        CI      H'30'
        BZ      AFT1            No room to prune
        LR      DC,Q
        LIS     H'1'
        COM
        ADC
        LR      A,SN
        CM
        BM      AFT2
        LIS     H'E'            Back 2 levels
        BR      AFT4
AFT1    CLR
        COM                      Now consider previous level
        LR      DC,Q
        ADC
        LR      Q,DC            We may need to save score
AFT2    LR      A,SN
        COM
        INC
        LR      SN,A
        CM
        BP      AFT3            Do not back score
        LR      DC,Q            Back score
        ST
        LR      A,HL
        CI      H'30'
        BNZ     AFT3
        LR      DC,H
        XDC
        DCI     TREE
        LISU    2
        LISL    0
        LIS     H'1'
        SL      4               Fast H'10'
        LR      S,A
        PI      TRAN            Save board
AFT3    LR      A,7             Reverse sides and back 1 level
        COM
        LR      7,A
        LIS     H'F'            Back 1 level
AFT4    SL      4               Fast H'F0' or H'E0'
        AS      HL
        LR      HL,A
        LR      DC,H
        PI      RASC
        JMP     SELE
EV6VAZ EVAL
EVAZ    CLR
        COM
        BR      EV1
EVAL    PI      SEE
        CLR
EV1     LR      CV,A
        CLR
        LR      SN,A            To accumulate score
        INC
        LR      DR,A            To index to ISP
        LI      ISA             Active pieces first
EV2     LIS     H'7'
        LR      BN,A            To index bytes
EV3     CLR
        AS      I
        BZ      EV9 
        LR      BY,A            Save byte
        CLR
        AS      CV
        BNZ     EV8             No positional credit in this case
        AS      BN
        BZ      EV4
        CI      H'7'
        BNZ     EV5
EV4     DCI     MSK2            Rows 0 and 7  H'A5'
        PI      CSUB
        DCI     MSK3            Rowa 0 and 7  H'BD'
        PI      CSUB
        DCI     MSK1            Rows 0 and 7  H'81'
        PI      CSUB
EV5     LR      A,BN 
        CI      H'1'            
        BZ      EV6
        CI      H'6'
        BZ      EV8
        PI      CSUB            All rows except 1 and 6  H'81'
        PI      CSUB            and again
        DCI     MSK3            All rows except 1 and 6  H'BD'
        PI      CSUB
EV6     LR      A,BN
        CI      H'2'
        BZ      EV7
        CI      H'5'
        BNZ     EV8
EV7     DCI     MSK2            Rows 2 and 5  H'A5'
        PI      CSUB
EV8     DCI     MSK4            All rows  HFF'
        PI      CSUB
EV9     DS      BN
        BP      EV3
        LR      A,SN
        COM
        INC
        LR      SN,A
        LISU    PLOC
        DS      DR
        BP      EV2             Around again for Passive pieces
        LR      A,HL
        SR      4
        DCI     SCOR-1
        ADC
        LR      Q,DC
        LR      A,SN
        CM
        BP      EV11
        LR      DC,Q
        ST
EV11    JMP     SELE
* Subroutine to count bits as masked
CSUB    LR      K,P
        LM                      _________________________________
        NS      BY              |_7_|_1_|_5_|_4_|_4_|_5_|_1_|_7_|
        BZ      CSU3            |_1_|_1_|_1_|_1_|_1_|_1_|_1_|_1_|
CSU2    DS      SN              |_5_|_1_|_3_|_2_|_2_|_3_|_1_|_5_|
        LR      FB,A            |_4_|_1_|_2_|_2_|_2_|_2_|_1_|_4_|
        AI      H'FF'           |_4_|_1_|_2_|_2_|_2_|_2_|_1_|_4_|
        XS      FB              |_5_|_1_|_3_|_2_|_2_|_3_|_1_|_5_|
        BNZ     CSU2            |_1_|_1_|_1_|_1_|_1_|_1_|_1_|_1_|
CSU3    PK                      |_7_|_1_|_5_|_4_|_4_|_5_|_1_|_7_|
MSK1    DC      H'81'
MSK2    DC      H'A5'                   Occupancy credit
MSK3    DC      H'BD'
MSK4    DC      H'FF'
* SHOW ADTB SEE
SHOW    LR   K,P     SAVE RETURN ADDRESS
        PI   PUSH    AND PUSH ONTO STACK
        DCI  CMRG    DCO TO PROG COPY OF COMMAND REG
        LM           GET SAME
        DCI  H'8F7'  DCO TO UM1 COPY OF SAME
        ST           RESET UM1 FROM PROG COPY
        PI   BORD    DISPLAY BOARD FIRST
        DCI  HSAV    THEN DCO TO HSAVE AREA
        LR   A,HU
        ST
        LR   A,HL
        ST           AND SAVE THE H REGISTER
        SR   4       GET HO NIBBLE OF HL
        SL   1       MULT BY 2 FOR INDEX INTO TABLE
        DCI  ADTB    DCO TO CHARACTER ADDRESS TABLE
        ADC          ADD OFFSET FOR HL HO NIBBLE
        LM
        LR   HU,A
        LM
        LR   HL,A    AND GET ADDRESS OF CHAR.INTO H
        DCI  OBJ0    DCO TO DEST START
        XDC          SAVE DEST IN DC1
        LR   DC,H    SOURCE INTO DCO
        LIS  H'7'    SET TRANSFER
        LR   HU,A    COUNT IN HU
SH4     LM           GET SOURCE BYTE
        XDC          NOW GET DEST. ADDRESS
        ST           AND STORE
        LIS  H'7'
        ADC          ADD OFFSET TO NEXT DEST.
        XDC          SOURCE INTO DCO, DEST IN DC1
        DS   HU      DECREMENT COUNTER
        BNZ  SH4     DONE?
        DCI  HSAV    YES
        LM           GET H REGISTER
        LR   HU,A    BACK TO ITS
        LM           ORIGINAL
        LR   HL,A    STATE
        PI   POPS    POP RETURN ADDRESS
        PK           AND RETURN
*-*-*-*-*-*-*-*-*-*-*
*ADDRESS TABLE FOR  *
*DIGIT CHARACTERS   *
*-*-*-*-*-*-*-*-*-*-*
ADTB    DC   H'218A' 0 ADDRESS
        DC   H'210C' 1 ADDRESS
        DC   H'217C' 2 ADDRESS
        DC   H'216E' 3 ADDRESS
        DC   H'20FE' 4 ADDRESS
        DC   H'20F0' 5 ADDRESS
        DC   H'20E2' 6 ADDRESS
        DC   H'2072' 7 ADDRESS
        DC   H'2064' 8 ADDRESS
        DC   H'2056' 9 ADDRESS
        DC   H'2087' A ADDRESS
        DC   H'214B' B ADDRESS
        DC   H'2167' C ADDRESS
        DC   H'20E9' D ADDRESS
        DC   H'205D' E ADDRESS
        DC   H'20DB' F ADDRESS
*
SEE     LR      K,P             See where it loops
        DCI     H'0EC0'         Save data here
        LIS     H'3'            3 items per entry
        AM
        CI      H'C'            Is there room?
        BP      SEE2            Yes
        CLR                     Start over
SEE2    DCI     H'0EC0'
        ST
        ADC
        LR      A,KU            Where we came from
        ST
        LR      A,KL
        ST
        LR      A,HL            And the H value
        ST
        PK
* TUN2 TUN1 END
*=*=*=*=*=*=*=*=*=*
TUN2    DC   H'4707'
        DC   H'78'
        DC   H'4003'
        DC   H'1F'
        DC   H'3C03'
        DC   H'1E'
        DC   H'3507'
        DC   H'1E'
        DC   H'3003'
        DC   H'1E'
        DC   H'2D03'
        DC   H'0F'
        DC   H'2D03'
        DC   H'0F'
        DC   H'2807'
        DC   H'5A'
        DC   H'3C03'
        DC   H'0F'
        DC   H'3507'
        DC   H'0F'
        DC   H'3003'
        DC   H'1E'
        DC   H'3C03'
        DC   H'1E'
        DC   H'3C03'
        DC   H'1E'
        DC   H'5007'
        DC   H'0F'
*=*=*=*=*=*=*=*=*=*=*
*COMPUTER WIN TUNE  *
*=*=*=*=*=*=*=*=*=*=*
TUN1    DC   H'2807'
        DC   H'2D'
        DC   H'2003'
        DC   H'0F'
        DC   H'1E03'
        DC   H'0F'
        DC   H'2003'
        DC   H'0F'
        DC   H'2403'
        DC   H'0F'
        DC   H'2807'
        DC   H'1E'
        DC   H'1E03'
        DC   H'0F'
        DC   H'2003'
        DC   H'1E'
        DC   H'2807'
        DC   H'2D'
        DC   H'2003'
        DC   H'0F'
        DC   H'1E03'
        DC   H'0F'
        DC   H'2003'
        DC   H'0F'
        DC   H'2807'
        DC   H'2D'
        DC   H'2003'
        DC   H'2D'
        END          END FOR ASSEMBLER
*
BRAK    LR      A,HL
        SR      4
        DCI     H'0C2B'
        CM
        BZ      BRA2
        JMP     SELE
BRA2    NOP
        NOP
        NOP
        NOP
        JMP     SELE
* Storage map
	 _______________________________________________________________
Image ar|_______________________________|_______________________________|
  10	|_______________________________|_______________________________|
  lines	|_______________________________|_______________________________|
  per	|_______________________________|_______________________________|
__row___|_______________________________|_______________________________|

Ply ar. |        Active pieces 		|       Passive pieces		|

	| 0   1   2   3 | 4   5   6   7 | 8   9   A   B | C   D   E   F |
H'0C00'	| Used by RES.	|		|		|		|
H'0C10'	|___________ ___|_______________|_______________|_______________|
H'0C20'	|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|see below
H'0C30'	| Row 1  of the	| board image	|		|		|
	|_______________|______________	|_______________|_______________|
H'0C80'	| Row 2		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0CD0'	| Row 3		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0D20'	| Row 4		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0D70'	| Row 5		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0DC0'	| Row 6		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0E10'	| Players board	|		|		|		|
H'0E20'	| PLY 0		|		|		|		|
H'0E30'	| Ply 1		|		|		|		|
H'0E40'	| Ply 2		|		|          _____|_______________|
H'0E50'	| Ply 3	_______	|_______________|__________|PLMD+___+___+___|TX |
H'0E60'	| PLY 4	 H'0E5F'| thru	'H'0ECE'|		|		|
H'0E70'	| PLY 5		|overwritten by	|text display	|		|
H'0E80'	| PLY 6		| to tell player|that it is his	|move		|
H'0E90'	| PLY 7		|		|		|		|
H'0EA0'	| PLY 8		|		|		|		|
H'0EB0'	| PLY 9		|		|		|	    ____|
H'0EC0'	| PLY 10 _______|_______________|_______________|___________|___|
H'0ED0'	| PLY 11 _______|_Overwritten___|_by PLMV_______|_______________|
H'0EE0'	| DNUM__________|_______________|_______________|_______________|
H'0EF0'	|_PLAY__|BY_|BN_|BY_|BN_|etc|___|___|___|___|___|___|___|___|___|
H'0F00'	|___|___|___|___|___|___|___|___|___|___|___|___|_XPOS______|YPO|
H'0F10'	| Row 7  of the	| board image	|		|		|
	|_______________|_______________|_______________|_______________|
H'0F60'	| Row 8		|		|		|		|
	|_______________|_______________|_______________|_______________|
H'0FB0'	|__SCOR_________|_______________|_______________|_______________|
H'0FC0'	|___|RGSV interrupt save area___________________________| 


	 _______________________________________________________
H'0C20'	|_BFLG_|_BLNF_|_XBLN_|_YBLN_|_BCNT_|_BKMV_|_HSAV_|_HSAV_|
	 _______________________________________________________
H'0C28'	|_PLY0_|_COL0_|_SELX_|_BLEV_|_AP20_|_XOLD_|_YOLD_|_CFLG_|